package student.thread.join.d02;

public class Testt {
    static Testt t = new Testt();

    class T1 extends Thread {
        @Override
        public void run() {
            //T3线程中要处理的东西
            System.out.println("T1线程执行");
            for (int i = 0; i < 10; i++) {
                System.out.println(this.getName() + ":" + i);
            }
        }
    }

    class T2 extends Thread {
        @Override
        public void run() {
            //T3线程中要处理的东西
            System.out.println("T2线程执行");
            for (int i = 0; i < 10; i++) {
                System.out.println(this.getName() + ":" + i);
            }
        }
    }

    class T3 extends Thread {
        @Override
        public void run() {
            //T3线程中要处理的东西
            System.out.println("T3线程执行");
            for (int i = 0; i < 10; i++) {
                System.out.println(this.getName() + ":" + i);
            }
        }
    }

    /**
     * join()方法的作用，是等待这个线程结束；
     * 也就是说，t.join()方法阻塞调用此方法的线程(calling thread)进入 TIMED_WAITING 状态，直到线程t完成，此线程再继续；
     * 通常用于在main()主线程内，等待其它线程完成再结束main()主线程。
     */
    public static void main(String[] args) throws InterruptedException {
        Thread t3 = t.new T3();
        Thread t2 = t.new T2();
        Thread t1 = t.new T1();

        t3.start(); //启动t3线程
        t3.join();  //阻塞main主线程，执行完t3再返回

        t2.start();
        t2.join();

        t1.start();
        t1.join();
    }
}
